<?php
/*
 * Expat 
 */
//通过 xml_parser_create() 函数初始化 XML 解析器
$parser=xml_parser_create();

/*
 * 创建配合不同事件处理程序的的函数
 */
//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
  {
  switch($element_name)
    {
    case "NOTE":
    echo "-- Note --<br />";
    break; 
    case "TO":
    echo "To: ";
    break; 
    case "FROM":
    echo "From: ";
    break; 
    case "HEADING":
    echo "Heading: ";
    break; 
    case "BODY":
    echo "Message: ";
    case "TEST":
    echo "测试：";
    }
  }

//Function to use at the end of an element
function stop($parser,$element_name)
  {
  echo "<br />";
  }

//Function to use when finding character data
function char($parser,$data)
  {
  echo $data;
  }

//添加 xml_set_element_handler() 函数来定义，当解析器遇到开始和结束标签时执行哪个函数
xml_set_element_handler($parser,"start","stop");

//添加 xml_set_character_data_handler() 函数来定义，当解析器遇到字符数据时执行哪个函数
xml_set_character_data_handler($parser,"char");

//Open XML file
$fp=fopen("testxml.xml","r");

//Read data
while ($data=fread($fp,4096))
  {
  	//通过 xml_parse() 函数来解析文件 "testxml.xml"
  xml_parse($parser,$data,feof($fp)) or 
  die (
  sprintf("XML Error: %s at line %d", 
  //万一有错误的话，添加 xml_error_string() 函数把 XML 错误转换为文本说明
  xml_error_string(xml_get_error_code($parser)),
  xml_get_current_line_number($parser))
  );
  }

//调用 xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内存
xml_parser_free($parser);

?>


<?php
/*
 * DOM 
 */
$xmlDoc = new DOMDocument();
$xmlDoc->load("testxml.xml");

print $xmlDoc->saveXML();
?>


<?php
/*
 * DOM 
 */
echo "<br>";
$xmlDoc = new DOMDocument();
$xmlDoc->load("testxml.xml");

$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
  {
  print $item->nodeName . " = " . $item->nodeValue . "<br />";
  }
?>

<?php
/*
 *  SimpleXML
 *  当执行类似下列的基础任务时，SimpleXML 使用起来非常快捷：

    1、读取 XML 文件
    2、从 XML 字符串中提取数据
    3、编辑文本节点或属性

	不过，在处理高级 XML 时，比如命名空间，最好使用 Expat解析器或 XML DOM。
 */
echo "<br>";
$xml = simplexml_load_file("testxml.xml");

echo $xml->getName() . "<br />";

foreach($xml->children() as $child)
  {
  echo $child->getName() . ": " . $child . "<br />";
  }
?>












